﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.UI.Bovespa.Operador.Communication.Bovespa.Operador.Operador;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.Operador.Communication.Translator.DataContractToModel
{
    public class Operador
    {
        public Model.Preferencias ToPreferencias(Bovespa.Operador.Operador.PreferenciasResponse from)
        {
            Model.Preferencias to = null;

            if (from != null)
            {
                to = new Model.Preferencias();
                to.Bolsa = from.Bolsa;
                to.CodigoOperador = from.CodigoOperador;

                switch (from.Mercado)
                {
                    case Bovespa.Operador.Operador.TipoMercado.BOX:
                        to.Mercado = Model.Enum.TipoMercado.BOX;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Estruturado:
                        to.Mercado = Model.Enum.TipoMercado.Estruturado;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.ExercicioOpcaoCompra:
                        to.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.ExercicioOpcaoVenda:
                        to.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Fracionario:
                        to.Mercado = Model.Enum.TipoMercado.Fracionario;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Futuro:
                        to.Mercado = Model.Enum.TipoMercado.Futuro;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Leilao:
                        to.Mercado = Model.Enum.TipoMercado.Leilao;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.LeilaoNaoCotados:
                        to.Mercado = Model.Enum.TipoMercado.LeilaoNaoCotados;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.OpcaoCompra:
                        to.Mercado = Model.Enum.TipoMercado.OpcaoCompra;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.OpcaoVenda:
                        to.Mercado = Model.Enum.TipoMercado.OpcaoVenda;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Termo:
                        to.Mercado = Model.Enum.TipoMercado.Termo;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.VencimentoFuturo:
                        to.Mercado = Model.Enum.TipoMercado.VencimentoFuturo;
                        break;
                    case Bovespa.Operador.Operador.TipoMercado.Vista:
                        to.Mercado = Model.Enum.TipoMercado.Vista;
                        break;

                }

                switch (from.Ordem)
                {
                    case Bovespa.Operador.Operador.TipoOrdem.Administrada:
                        to.Ordem = Model.Enum.TipoOrdem.Administrada;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.Casada:
                        to.Ordem = Model.Enum.TipoOrdem.Casada;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.Discricionaria:
                        to.Ordem = Model.Enum.TipoOrdem.Discricionaria;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.Financiamento:
                        to.Ordem = Model.Enum.TipoOrdem.Financiamento;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.Limitada:
                        to.Ordem = Model.Enum.TipoOrdem.Limitada;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.Mercado:
                        to.Ordem = Model.Enum.TipoOrdem.Mercado;
                        break;
                    case Bovespa.Operador.Operador.TipoOrdem.OnStop:
                        to.Ordem = Model.Enum.TipoOrdem.OnStop;
                        break;
                }

                to.OrdemModoInsert = from.OrdemModoInsert;
                to.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
                to.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
                to.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
                to.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;   
            }

            return to;
        }

        #region ToOperador

        public Model.Operador ToOperador(OperadorResponse from)
        {
            if (from == null) return null;

            return new Model.Operador
            {
                Subordinado = from.Subordinado,
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado
            };
        }

        public ModelCollection<Model.Operador> ToOperador(List<OperadorResponse> from)
        {
            if (from == null) return null;

            ModelCollection<Model.Operador> retorno = new ModelCollection<Model.Operador>();

            foreach (OperadorResponse item in from)
            {
                retorno.Add(new Model.Operador
                {
                    Subordinado = item.Subordinado,
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOrigem

        public Model.Origem ToOrigem(OrigemResponse from)
        {
            if (from == null) return null;

            return new Model.Origem
            {
                Corretora = from.Corretora,
                OperadorOrigem = from.OperadorOrigem,
                OperadorReceptor = from.OperadorReceptor
            };
        }

        public ModelCollection<Model.Origem> ToOrigem(List<OrigemResponse> from)
        {
            if (from == null) return null;

            ModelCollection<Model.Origem> retorno = new ModelCollection<Model.Origem>();

            foreach (OrigemResponse item in from)
            {
                retorno.Add(new Model.Origem
                {
                    Corretora = item.Corretora,
                    OperadorOrigem = item.OperadorOrigem,
                    OperadorReceptor = item.OperadorReceptor
                });
            }
            return retorno;
        }

        #endregion
    }
}
